package lambda;

import java.io.File;
import java.io.FileFilter;

/**
 *
 * lambda表达式 JDK8之后推出的新特性
 *
 * lambda可以让程序员面向函数式编程
 * 让我们用更精简的语法创建匿名内部类
 * 语法：
 *  (参数列表) ->{
 *      方法体
 *  }
 *  当我们使用匿名内部类创建一个对象时 如果实现的接口中[只含有一个抽象方法时] 该操作就可以使用lambda
 *  表达式做替换
 *  从而使得代码简洁 优雅
 *
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类的写法创建一个文件过滤器
        FileFilter filter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.length() > 500;
            }
        };

        //lambda表达式写法 去掉接口和方法名部分 在参数列表和方法体大括号之间加上 -> 就是lambda
        FileFilter filter1 =(File f)->{
            return f.length()>500;
        };

        //lambda表达式写法：可以省略方法参数类型
        FileFilter filter2 = (f) -> {return f.length()>500; };

        //如果放的参数只有一个 参数（）可以忽略不写
        FileFilter filter3 = f -> {return f.length()>500; };

        //如果方法体中只有一句代码 那么{}可以省略
        //如果有return关键字 那么忽略{}的同时 return关键字一同省略
        FileFilter filter4 = f->f.length()>500;

        File dir = new File("java-study-se/src/file");
        if(dir.isDirectory()){
            File[] subs = dir.listFiles(f -> f.length() > 500);
            for (int i = 0; i < subs.length; i++) {
                System.out.println(subs[i].getName()+":"+subs[i].length());
            }
        }

    }
}
